package com.ht.api.util;

import java.io.File;

import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.FFmpegFrameRecorder;

import lombok.extern.slf4j.Slf4j;

/**
 * mp3工具类
 * @author asq
 * @createTime 2025年4月22日 16:24:21
 */
@Slf4j
public class Mp3Util {
	public static void main(String[] args) {
		File amrFile = new File("E:\\123.amr");
		File mp3 = convertAmrToMp3(amrFile);
	}
	
    /**
     * 将 AMR 文件转换为 MP3 文件（保持相同文件名，仅扩展名不同）
     * @param amrFile 输入的 AMR 文件
     * @return 转换后的 MP3 文件，如果转换失败则返回 null
     */
	public static File convertAmrToMp3(File amrFile) {
	    // 输入验证（保持不变）
	    if (amrFile == null || !amrFile.exists() || !amrFile.getName().toLowerCase().endsWith(".amr")) {
	        System.err.println("无效的输入文件");
	        return null;
	    }

	    File mp3File = new File(
	        amrFile.getParent(), 
	        amrFile.getName().replaceFirst("(?i)\\.amr$", ".mp3")
	    );

	    try (FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(amrFile);
	         FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(mp3File, 0)) {

	        grabber.start();
	        
	        // 关键修改：使用完整类名
	        recorder.setAudioCodec(org.bytedeco.ffmpeg.global.avcodec.AV_CODEC_ID_MP3);
	        recorder.setAudioChannels(grabber.getAudioChannels());
	        recorder.setSampleRate(grabber.getSampleRate());
	        recorder.start();

	        while (true) {
	            org.bytedeco.javacv.Frame frame = grabber.grabFrame();
	            if (frame == null || frame.samples == null) break;
	            recorder.record(frame);
	        }

	        return mp3File;
	    } catch (Exception e) {
	        if (mp3File.exists()) mp3File.delete();
	        e.printStackTrace();
	        return null;
	    }
	}
}